package logic.facade;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import logic.service.ContactService;
import vo.ContactVO;
import vo.IValueObject;

/**
 *
 * @author Alexander
 */
/**Fachada Contacto*/
public class ContactFacade extends Facade{

    /**Constructor Fachada Contacto.*/
    public ContactFacade() {
        setService(new ContactService());
    }

    @Override
    /**Determina si existe un ContactVO con el id del argumento.*/
    protected boolean exist(IValueObject vo) {
        return !(super.find(((ContactVO) vo).getId()) == null);
    }
    
    /**
     * Busca los contactos de un usuario
     * @param user Usuario registrado
     * @param contactName Nombre del contacto
     * @return Lista de contactos
     */
    public List<ContactVO> findByUser(String user, String contactName){
        List<ContactVO> contact = new ArrayList<>();
        EntityManagerFactory emf = null;
        EntityManager em = null;
        
        try{
            emf = Persistence.createEntityManagerFactory("StunnicusPU");
            em = emf.createEntityManager();
            contact = ((ContactService) getService()).findByUser(user, contactName, em);
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally{
            if(em != null){
                em.clear();
                em.close();
            }
            return contact;
        }
    }
    
    /**
     * Obtiene la lista de telefonos de un contacto
     * @param user Usuario registrado
     * @param cont Contacto del usuario
     * @return Lista de telefonos del contacto
     */
    public List<Double> phoneList(String user, String cont){
        List<Double> phone = null;
        EntityManagerFactory emf = null;
        EntityManager em = null;
        
        try{
            emf = Persistence.createEntityManagerFactory("StunnicusPU");
            em = emf.createEntityManager();
            phone = ((ContactService) getService()).phoneList(user, cont, em);
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally{
            if(em != null){
                em.clear();
                em.close();
            }
            return phone;
        }
    }
    
    /**
     * Busca un contacto en especifico de un usuario
     * @param user Usuario activo
     * @param cont Nombre del contacto
     * @return El contacto del usuario
     */
    public IValueObject findContact(String user, String cont){
        ContactVO con = null;
        EntityManagerFactory emf = null;
        EntityManager em = null;
        
        try{
            emf = Persistence.createEntityManagerFactory("StunnicusPU");
            em = emf.createEntityManager();
            con = (ContactVO) ((ContactService) getService()).findContact(user, cont, em);
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally{
            if(em != null){
                em.clear();
                em.close();
            }
            return con;
        }
    }
}
